package com.ruoyi.product.domain;

import java.math.BigDecimal;
import java.time.LocalDate;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 商品管理对象 points_product_info
 * 
 * @author amy
 * @date 2025-06-06
 */
@Schema(description = "商品管理对象")
public class PointsProductInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;


    /** 自增ID */
    @Schema(title = "自增ID")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 逻辑主键-商品编码 */
    @Schema(title = "逻辑主键-商品编码")
    private String productCode;

    /** 商品名称 */
    @Schema(title = "商品名称")
    @Excel(name = "商品名称")
    private String productName;

    /** 商品描述 */
    @Schema(title = "商品描述")
    @Excel(name = "商品描述")
    private String productDescription;

    /** 商品图片URL */
    @Schema(title = "商品图片URL")
    @Excel(name = "商品图片URL")
    private String productImage;

    /** 积分价格 */
    @Schema(title = "积分价格")
    @Excel(name = "积分价格")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long pointsPrice;

    /** 商品原价 */
    @Schema(title = "商品原价")
    @Excel(name = "商品原价")
    private BigDecimal originalPrice;

    /** 库存数量 */
    @Schema(title = "库存数量")
    @Excel(name = "库存数量")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long stockQuantity;

    /** 已售数量 */
    @Schema(title = "已售数量")
    @Excel(name = "已售数量")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long soldQuantity;

    /** 商品分类 */
    @Schema(title = "商品分类")
    @Excel(name = "商品分类")
    private String productCategory;

    /** 商品品牌 */
    @Schema(title = "商品品牌")
    @Excel(name = "商品品牌")
    private String productBrand;

    /** 排序序号 */
    @Schema(title = "排序序号")
    @Excel(name = "排序序号")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long sortOrder;

    /** 每人限兑数量 */
    @Schema(title = "每人限兑数量")
    @Excel(name = "每人限兑数量")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long exchangeLimit;

    /** 商品上架开始时间 */
    @Schema(title = "商品上架开始时间")
    @Excel(name = "商品上架开始时间")
    private LocalDate startTime;

    /** 商品下架结束时间 */
    @Schema(title = "商品下架结束时间")
    @Excel(name = "商品下架结束时间")
    private LocalDate endTime;

    /** 商品状态 1-上架 2-下架 3-售罄 */
    @Schema(title = "商品状态 1-上架 2-下架 3-售罄")
    @Excel(name = "商品状态 1-上架 2-下架 3-售罄")
    private Long productStatus;

    /** 创建人 */
    @Schema(title = "创建人")
    private String createdBy;

    /** 创建时间 */
    @Schema(title = "创建时间")
    private LocalDate createdTime;

    /** 更新人 */
    @Schema(title = "更新人")
    private String updatedBy;

    /** 更新时间 */
    @Schema(title = "更新时间")
    private LocalDate updatedTime;

    /** 删除标志 0-未删除 1-已删除 */
    @Schema(title = "删除标志 0-未删除 1-已删除")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long deletedFlag;
    public void setId(Long id) 
    {
        this.id = id;
    }

    public Long getId()
    {
        return id;
    }


    public void setProductCode(String productCode) 
    {
        this.productCode = productCode;
    }

    public String getProductCode()
    {
        return productCode;
    }


    public void setProductName(String productName) 
    {
        this.productName = productName;
    }

    public String getProductName()
    {
        return productName;
    }


    public void setProductDescription(String productDescription) 
    {
        this.productDescription = productDescription;
    }

    public String getProductDescription()
    {
        return productDescription;
    }


    public void setProductImage(String productImage) 
    {
        this.productImage = productImage;
    }

    public String getProductImage()
    {
        return productImage;
    }


    public void setPointsPrice(Long pointsPrice) 
    {
        this.pointsPrice = pointsPrice;
    }

    public Long getPointsPrice()
    {
        return pointsPrice;
    }


    public void setOriginalPrice(BigDecimal originalPrice) 
    {
        this.originalPrice = originalPrice;
    }

    public BigDecimal getOriginalPrice()
    {
        return originalPrice;
    }


    public void setStockQuantity(Long stockQuantity) 
    {
        this.stockQuantity = stockQuantity;
    }

    public Long getStockQuantity()
    {
        return stockQuantity;
    }


    public void setSoldQuantity(Long soldQuantity) 
    {
        this.soldQuantity = soldQuantity;
    }

    public Long getSoldQuantity()
    {
        return soldQuantity;
    }


    public void setProductCategory(String productCategory) 
    {
        this.productCategory = productCategory;
    }

    public String getProductCategory()
    {
        return productCategory;
    }


    public void setProductBrand(String productBrand) 
    {
        this.productBrand = productBrand;
    }

    public String getProductBrand()
    {
        return productBrand;
    }


    public void setSortOrder(Long sortOrder) 
    {
        this.sortOrder = sortOrder;
    }

    public Long getSortOrder()
    {
        return sortOrder;
    }


    public void setExchangeLimit(Long exchangeLimit) 
    {
        this.exchangeLimit = exchangeLimit;
    }

    public Long getExchangeLimit()
    {
        return exchangeLimit;
    }


    public void setStartTime(LocalDate startTime) 
    {
        this.startTime = startTime;
    }

    public LocalDate getStartTime()
    {
        return startTime;
    }


    public void setEndTime(LocalDate endTime) 
    {
        this.endTime = endTime;
    }

    public LocalDate getEndTime()
    {
        return endTime;
    }


    public void setProductStatus(Long productStatus) 
    {
        this.productStatus = productStatus;
    }

    public Long getProductStatus()
    {
        return productStatus;
    }


    public void setCreatedBy(String createdBy) 
    {
        this.createdBy = createdBy;
    }

    public String getCreatedBy()
    {
        return createdBy;
    }


    public void setCreatedTime(LocalDate createdTime) 
    {
        this.createdTime = createdTime;
    }

    public LocalDate getCreatedTime()
    {
        return createdTime;
    }


    public void setUpdatedBy(String updatedBy) 
    {
        this.updatedBy = updatedBy;
    }

    public String getUpdatedBy()
    {
        return updatedBy;
    }


    public void setUpdatedTime(LocalDate updatedTime) 
    {
        this.updatedTime = updatedTime;
    }

    public LocalDate getUpdatedTime()
    {
        return updatedTime;
    }


    public void setDeletedFlag(Long deletedFlag) 
    {
        this.deletedFlag = deletedFlag;
    }

    public Long getDeletedFlag()
    {
        return deletedFlag;
    }



    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("productCode", getProductCode())
            .append("productName", getProductName())
            .append("productDescription", getProductDescription())
            .append("productImage", getProductImage())
            .append("pointsPrice", getPointsPrice())
            .append("originalPrice", getOriginalPrice())
            .append("stockQuantity", getStockQuantity())
            .append("soldQuantity", getSoldQuantity())
            .append("productCategory", getProductCategory())
            .append("productBrand", getProductBrand())
            .append("sortOrder", getSortOrder())
            .append("exchangeLimit", getExchangeLimit())
            .append("startTime", getStartTime())
            .append("endTime", getEndTime())
            .append("productStatus", getProductStatus())
            .append("createdBy", getCreatedBy())
            .append("createdTime", getCreatedTime())
            .append("updatedBy", getUpdatedBy())
            .append("updatedTime", getUpdatedTime())
            .append("deletedFlag", getDeletedFlag())
            .toString();
    }
}
